如何绘制任泽平《鼓励生育基金》的几幅图
本文作者:邱沣,河南大学经济学院 本文编辑:喻淑敏
技术总编:李婷婷
Stata&Python云端课程来啦!
为了平衡团队运营成本,维系公众号的运营,也与国内动辄数千元的Stata课程缩短差距,我们的网课不得不上调价格,我们决定于2022年1月15日起调价,Python课程的价格调整为299.9元,Stata进阶课程调为299.9元,Stata基础课程调整到329.9元。大家可以告知一下身边想要购买的小伙伴,欲购从速哦,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言~我们在这篇推文提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~此外,凭考研准考证和任意一篇推文集够50个赞,购买爬虫俱乐部的主要课程,即可获得50元的优惠,大家赶快行动起来吧~
导读
首先,我们来观察一下这两幅图形,都是散点图,有标题和备注,还根据数据拟合了一条虚线,最为关键的是每一个点都有其对应的国家,即每一个点都打上了标签。而这一点在Stata中我们可以通过twoway命令的mlabel( )选项实现。
接下来,我们先看一下如何绘制简单的散点图:
[twoway] scatter varlist [if] [in] [weight] [, options]
sysuse auto,clear
twoway scatter mpg weight in 50/60, mlabel(make)
设置标签的方位和角度可以通过两个选项来实现。即mlabposition(clockposlist)和mlabangle(anglestylelist)。
mlabposition(clockposlist) :设置标签的方位,需要注意的是这里的方位是指时钟方位,0-12分别对应时钟的12个点位,比如12点位对应的就是正上方。
mlabangle(anglestylelist) :设置标签倾斜的角度,这里直接输入对应的角度即可,比如倾斜45度即用 mlabangle(45)表示。
twoway scatter mpg weight in 50/60, mlabel(make) mlabposition(12) mlabangle(45)
2.设置标签的颜色
此外,我们除了可以设置标签的颜色,还可以设置点的颜色,如果我们想将点设置为浅蓝色,借助选项mcolor(midblue) 即可实现。
3.设置标签的大小
twoway scatter mpg weight in 50/60, mlabel(make) mlabposition(12) mlabangle(20) ///
mlabcolor(black) mcolor(midblue) mlabsize(medium)
4.拟合直线
twoway lfit yvar xvar [if] [in] [weight] [, options]
twoway (scatter mpg weight in 50/60, mlabel(make) mlabposition(12) mlabangle(20) mlabcolor(black) mcolor(midblue) mlabsize(medium)) ///
(lfit mpg weight in 50/60,lpattern(dot) lcolor(blue))
其中lpattern() 为设置直线的连接方式,这里为还原原图的画法设置为点状。lcolor() 为设置线条的颜色,这里还原原图的样式设为蓝色。
5.图形的标题和备注
twoway (scatter mpg weight in 50/60, mlabel(make) mlabposition(12) mlabangle(20) mlabcolor(black) mcolor(midblue) mlabsize(medium)) ///
(lfit mpg weight in 50/60,lpattern(dot) lcolor(blue)) , ///
title(美国1978年汽车行业横截面数据) note(Data Source: 1978 automobile data,size(large)) xtitle("") legend(off)
twoway bar yvar xvar [if] [in] [, options]
sysuse pop2000, clear
list agegrp maletotal femtotal
replace maletotal = -maletotal/1e+6
replace femtotal = femtotal/1e+6
*转换数据单位为百万
twoway bar maletotal agegrp, horizontal xtitle("Population in millions") ytitle("")
我们和原图对比一下会发现,Y轴标签未反应真实的年龄结构,而且原图颜色为蓝色且每个小条形之间是有空隙的。接下来,我们针对这些问题进一步美化和完善。
twoway bar maletotal agegrp, horizontal barwidth(0.8) color(blue) ///
ylabel(1(1)17, angle(horizontal) valuelabel labsize(*.8)) xtitle("Population in millions") ytitle("")
其中barwidth设置条形图的宽度(默认为1,即条与条没有空隙);color( ) 设置条形图的颜色;valuelabel是显示真实的变量标签;ylabel为设置纵坐标刻度,其中angle为设置刻度值的倾斜角度,这里同样设为了水平方向;labsize(*.8) 设置y轴刻度值大小为原来的0.8倍。
twoway (bar maletotal agegrp, horizontal xvarlab(Males) barwidth(0.8) color(blue)) ///
(bar femtotal agegrp, horizontal xvarlab(Females) barwidth(0.8)), ///
ylabel(1(1)17, angle(horizontal) valuelabel labsize(*.8)) xtitle("Population in millions") ytitle("") ///
xlabel(-10 "10" -7.5 "7.5" -5 "5" -2.5 "2.5" 2.5 5 7.5 10)legend(label(1 Males) label(2 Females) position(1))title("US Male and Female Population by Age")subtitle("Year 2000")note("Source: U.S. Census Bureau, Census 2000, Tables 1, 2 and 3",span)
但我们也发现,原图中的Y轴处在两个条形图的中间,我们怎样让Y轴显示在中间呢?其实这里有个非常巧妙的方法,我们先隐藏真实的Y轴,利用选项yscale(noline) ylabel(none) (设Y轴为无刻度线,无标签)。再生成一个数值为零的变量,用变量agegrp为纵坐标,零变量为横坐标,生成散点图。这样一来这些点都会落在条形图的正中间,最后利用选项mlabel(agegrp)为每个点打上所属的年龄标签,就构成了我们所需要的“Y轴”。
gen zero = 0
twoway (bar maletotal agegrp, horizontal xvarlab(Males) barwidth(0.8) color(blue)) ///
(bar femtotal agegrp, horizontal xvarlab(Females) barwidth(0.8)) ///
(scatter agegrp zero , mlabel(agegrp) mlabcolor(black) msymbol(i)), ///
yscale(noline) ylabel(none) xtitle("Population in millions") ytitle("")xlabel(-10 "10" -7.5 "7.5" -5 "5" -2.5 "2.5" 2.5 5 7.5 10) ///
legend(label(1 Males) label(2 Females) position(1)) legend(order(1 2)) title("US Male and Female Population by Age")subtitle("Year 2000")note("Source: U.S. Census Bureau, Census 2000, Tables 1, 2 and 3",span)
经过不断的完善和美观,我们终于近乎完美地画出了原图样式的条形图。
graph combine name [name ...] [, options]
graph combine 1.gph 2.gph, saving(3)
结语
通过一步步不停地探索和实践,我们终于画出了样式精美Stata图形,从中可以看出Stata在图形处理方面的强大,而无所不能的Stata又还能画出怎样精妙的图形呢?欢迎大家和我们一起学习和探索!
腾讯课堂课程二维码
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
Python 第六天——字符串
findname——想要什么找什么
Python字符串之“分分合合”
PDF转docx可批量操作?——wordconvert的小技巧考研之后,文科生需以“do”躬“do”!
手绘五星兴家国——用Stata绘制五星红旗
Seminar丨董事会的性别多样化和企业创新:来自国际的证据Python与数据库交互——窗口函数
Stata之post命令——数据邮递爬虫俱乐部成员的Stata学习经验分享来啦!
Seminar丨2002年萨班斯·奥克斯利法案的经济后果我几乎画出了“隔壁三哥”家的国旗
Python基础——三大数字类型,你都了解吗?如何用Stata绘制带指向性箭头标注的图像
Seminar丨荐仆贷款——19世纪中国的信任辅助贷款【技能篇】多进程队列间通信
Seminar丨公司董事会的人才增长:来自中国的证据
正则表达式--懒惰模式
爬完独立董事的年薪,我的眼镜跌破了!识别旅游“照骗”——看风景名胜是否名副其实主成分分析的Python实现正则表达式--贪婪模式
Seminar丨谁更重要:高管股权薪酬与财务报告欺诈DOS能量,超乎你想象!爬虫实战丨走进哈利波特的魔法世界
数据集合并的新路子-frlink命令
Seminar丨附近的公司:利用卫星图像研究本地信息优势线性同余法生成伪随机数
[技能篇]多线程爬虫
“好哭”是衡量一部好电影的标准吗?
Stata&Python云端课程来啦!带你了解Stata中的矩阵
Seminar|总统的朋友:政治关联与企业价值爬虫实战 | 爬取中国天气网
爬虫实战 | 爬取东方财富网经济数据——以居民消费价格指数(CPI)为例
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。